﻿using FunctionalCLR.Core.Function.Logic;
using FunctionalCLR.Core.Functions.Maths;
using FunctionalCLR.Core.Function.Arithmetics;

namespace FunctionalCLR.Core
{
    public interface IVisitor
    {
        object Visit(IdentifierNode node);

        object Visit(NumberNode node);

        object Visit(StringNode node);

        object Visit(SubNode node);

        object Visit(AddNode node);

        object Visit(MulNode node);

        object Visit(RemainderNode node);

        object Visit(DivNode node);
        
        object Visit(PowerNode node);
        
        object Visit(LogNode node);

        object Visit(LargerThanNode node);

        object Visit(LessThanNode node);

        object Visit(LargerEqualToNode node);

        object Visit(LessEqualToNode node);

        object Visit(EqualNode node);

        object Visit(NotEqualNode node);

        object Visit(AndNode node);

        object Visit(OrNode node);

        object Visit(NotNode node);
        
        object Visit(FuncNode node);
    }
}
